Nacos 服务中心搭建环境
Nacos 是什么?
Nacos 是一个服务注册中心,也是一个配置中心,这篇笔记就按照官网的配置一步步配置下来,把踩的坑记录下来
搭建 nacos-server
前言:Nacos 自己就是服务中心,所以它不用像 Eureka 那样需要自己配置一个 Server,直接使用阿里提供的 nacos-server 工具安装使用就行了,每个微服务模块都只需要配置服务发现
首先下载安装 nacos-server
wget https://github.com/alibaba/nacos/releases/download/2.0.1/nacos-server-2.0.1.tar.gz
tar -xvf nacos-server-2.0.1.tar.gz
启动命令
cd nacos/bin
# 这个 standalone 代表着单机模式运行,非集群模式
sh startup.sh -m standalone
启动失败,检测日志发现是内存不够

# 首先检查当前内存大小
free -h
# 然后可以使用 top 命令监控进程,使用 kill 命令杀掉某个进程

要解决这个问题就要修改这个启动时指定的内存,那么我们修改一下这个启动脚本 startup.sh
vim startup.sh
可以看到这段配置(standalone 的那个):
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
将 512 修改为 256 即可
如果出现以下报错:
[[: not found
这是因为 Ubuntu 的 sh 命令无法识别 "[[]]" 表达式。
bash startup.sh -m standalone
然后访问
http://localhost:8848/nacos/#/login
就可以看到界面了,默认账号/密码: nacos/nacos

使用 Nacos 启动配置管理
使用 Nacos 可以很方便做配置中心,如下配置一个简单的 DEMO 来接收变更的配置
官方的源码:nacos-spring-boot-config-example
配置环境
首先引入 Spring Cloud Alibaba 的大礼包
<!--spring cloud 阿里巴巴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
然后主要引入下面两个
<!--整合 actuator 监视服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
</dependency>
在 Spring Boot 添加依赖
<properties>
<nacos-config-spring-boot.version>0.2.7</nacos-config-spring-boot.version>
</properties>
<!-- ............ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>${nacos-config-spring-boot.version}</version>
</dependency>
<!-- 注意!!!在 SpringCloud 要用下面这个依赖,就不用上面那个了 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-actuator</artifactId>
<version>${nacos-config-spring-boot.version}</version>
</dependency>
<!-- 同理:nacos-config-spring-boot-actuator 应该使用 SpringCloud 的 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在 application.yml 中配置 Nacos server 的地址,以及开放健康检查
nacos:
discovery:
server-addr: 192.168.211.138:8848
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
使用 @NacosPropertySource 加载 dataId 为 example 的配置源,并开启自动更新:
@SpringBootApplication
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
}
通过 Nacos 的 @NacosValue 注解设置属性值。
@RestController()
@RequestMapping("/config")
public class ConfigController {
@NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
private boolean useLocalCache;
@GetMapping("/get")
public boolean get() {
return useLocalCache;
}
}
启动测试
启动 NacosConfigApplication,调用
curl http://localhost:8080/config/get
返回内容是 false

通过调用 Nacos Open API 向 Nacos server 发布配置:dataId 为 example,内容为 useLocalCache=true
curl -X POST "http://localhost:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"

再次访问发现返回值已经是 true 了
curl http://localhost:8080/config/get